6101606040523480156200001257600080fd5b5060405162002a4f38038062002a4f8339818101604052810190620000389190620006d1565b6040518060400160405280601081526020017f4761736c65737320476966746361726400000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280601081526020017f4761736c657373204769667463617264000000000000000000000000000000008152506040518060400160405280600381526020017f474c470000000000000000000000000000000000000000000000000000000000815250816003908162000122919062000988565b50806004908162000134919062000988565b5050506200014d6005836200024360201b90919060201c565b61012081815250506200016b6006826200024360201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a08181525050620001aa6200029b60201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505050505080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200023b3383620002f860201b60201c565b505062000d3f565b6000602083511015620002695762000261836200038560201b60201c565b905062000295565b826200027b83620003f260201b60201c565b60000190816200028c919062000988565b5060ff60001b90505b92915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e051610100514630604051602001620002dd95949392919062000aac565b60405160208183030381529060405280519060200120905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200036d5760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000364919062000b09565b60405180910390fd5b6200038160008383620003fc60201b60201c565b5050565b600080829050601f81511115620003d557826040517f305a27a9000000000000000000000000000000000000000000000000000000008152600401620003cc919062000bb5565b60405180910390fd5b805181620003e39062000c0b565b60001c1760001b915050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200045257806002600082825462000445919062000caa565b9250508190555062000528565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015620004e1578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620004d89392919062000ce5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620005735780600260008282540392505081905550620005c0565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200061f919062000d22565b60405180910390a3505050565b600080fd5b6000819050919050565b620006468162000631565b81146200065257600080fd5b50565b60008151905062000666816200063b565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000699826200066c565b9050919050565b620006ab816200068c565b8114620006b757600080fd5b50565b600081519050620006cb81620006a0565b92915050565b60008060408385031215620006eb57620006ea6200062c565b5b6000620006fb8582860162000655565b92505060206200070e85828601620006ba565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200079a57607f821691505b602082108103620007b057620007af62000752565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200081a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007db565b620008268683620007db565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000869620008636200085d8462000631565b6200083e565b62000631565b9050919050565b6000819050919050565b620008858362000848565b6200089d620008948262000870565b848454620007e8565b825550505050565b600090565b620008b4620008a5565b620008c18184846200087a565b505050565b5b81811015620008e957620008dd600082620008aa565b600181019050620008c7565b5050565b601f82111562000938576200090281620007b6565b6200090d84620007cb565b810160208510156200091d578190505b620009356200092c85620007cb565b830182620008c6565b50505b505050565b600082821c905092915050565b60006200095d600019846008026200093d565b1980831691505092915050565b60006200097883836200094a565b9150826002028217905092915050565b620009938262000718565b67ffffffffffffffff811115620009af57620009ae62000723565b5b620009bb825462000781565b620009c8828285620008ed565b600060209050601f83116001811462000a005760008415620009eb578287015190505b620009f785826200096a565b86555062000a67565b601f19841662000a1086620007b6565b60005b8281101562000a3a5784890151825560018201915060208501945060208101905062000a13565b8683101562000a5a578489015162000a56601f8916826200094a565b8355505b6001600288020188555050505b505050505050565b6000819050919050565b62000a848162000a6f565b82525050565b62000a958162000631565b82525050565b62000aa6816200068c565b82525050565b600060a08201905062000ac3600083018862000a79565b62000ad2602083018762000a79565b62000ae1604083018662000a79565b62000af0606083018562000a8a565b62000aff608083018462000a9b565b9695505050505050565b600060208201905062000b20600083018462000a9b565b92915050565b600082825260208201905092915050565b60005b8381101562000b5757808201518184015260208101905062000b3a565b60008484015250505050565b6000601f19601f8301169050919050565b600062000b818262000718565b62000b8d818562000b26565b935062000b9f81856020860162000b37565b62000baa8162000b63565b840191505092915050565b6000602082019050818103600083015262000bd1818462000b74565b905092915050565b600081519050919050565b6000819050602082019050919050565b600062000c02825162000a6f565b80915050919050565b600062000c188262000bd9565b8262000c248462000be4565b905062000c318162000bf4565b9250602082101562000c745762000c6f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802620007db565b831692505b5050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cb78262000631565b915062000cc48362000631565b925082820190508082111562000cdf5762000cde62000c7b565b5b92915050565b600060608201905062000cfc600083018662000a9b565b62000d0b602083018562000a8a565b62000d1a604083018462000a8a565b949350505050565b600060208201905062000d39600083018462000a8a565b92915050565b60805160a05160c05160e051610100516101205161014051611cb562000d9a6000396000610adc01526000610aa101526000610ff101526000610fd00152600061099c015260006109f201526000610a1b0152611cb56000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a0823111610097578063a9059cbb11610066578063a9059cbb14610290578063d505accf146102c0578063dd62ed3e146102dc578063f645d4f91461030c576100f5565b806370a08231146101ee5780637ecebe001461021e57806384b0196e1461024e57806395d89b4114610272576100f5565b806319ac1342116100d357806319ac13421461016657806323b872dd14610182578063313ce567146101b25780633644e515146101d0576100f5565b806306fdde03146100fa578063095ea7b31461011857806318160ddd14610148575b600080fd5b61010261032a565b60405161010f91906114de565b60405180910390f35b610132600480360381019061012d9190611599565b6103bc565b60405161013f91906115f4565b60405180910390f35b6101506103df565b60405161015d919061161e565b60405180910390f35b610180600480360381019061017b91906116a8565b6103e9565b005b61019c6004803603810190610197919061174a565b610401565b6040516101a991906115f4565b60405180910390f35b6101ba610430565b6040516101c791906117ac565b60405180910390f35b6101d8610439565b6040516101e591906117d6565b60405180910390f35b610208600480360381019061020391906117f1565b610448565b604051610215919061161e565b60405180910390f35b610238600480360381019061023391906117f1565b610490565b604051610245919061161e565b60405180910390f35b6102566104a2565b6040516102699796959493929190611926565b60405180910390f35b61027a61054c565b60405161028791906114de565b60405180910390f35b6102aa60048036038101906102a59190611599565b6105de565b6040516102b791906115f4565b60405180910390f35b6102da60048036038101906102d591906116a8565b610601565b005b6102f660048036038101906102f191906119aa565b610749565b604051610303919061161e565b60405180910390f35b6103146107d0565b60405161032191906119ea565b60405180910390f35b60606003805461033990611a34565b80601f016020809104026020016040519081016040528092919081815260200182805461036590611a34565b80156103b25780601f10610387576101008083540402835291602001916103b2565b820191906000526020600020905b81548152906001019060200180831161039557829003601f168201915b5050505050905090565b6000806103c76107f6565b90506103d48185856107fe565b600191505092915050565b6000600254905090565b6103f887878787878787610601565b50505050505050565b60008061040c6107f6565b9050610419858285610810565b6104248585856108a4565b60019150509392505050565b60006012905090565b6000610443610998565b905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061049b82610a4f565b9050919050565b6000606080600080600060606104b6610a98565b6104be610ad3565b46306000801b600067ffffffffffffffff8111156104df576104de611a65565b5b60405190808252806020026020018201604052801561050d5781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b60606004805461055b90611a34565b80601f016020809104026020016040519081016040528092919081815260200182805461058790611a34565b80156105d45780601f106105a9576101008083540402835291602001916105d4565b820191906000526020600020905b8154815290600101906020018083116105b757829003601f168201915b5050505050905090565b6000806105e96107f6565b90506105f68185856108a4565b600191505092915050565b8342111561064657836040517f6279130200000000000000000000000000000000000000000000000000000000815260040161063d919061161e565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886106758c610b0e565b8960405160200161068b96959493929190611a94565b60405160208183030381529060405280519060200120905060006106ae82610b65565b905060006106be82878787610b7f565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461073257808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610729929190611af5565b60405180910390fd5b61073d8a8a8a6107fe565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b61080b8383836001610baf565b505050565b600061081c8484610749565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461089e578181101561088e578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161088593929190611b1e565b60405180910390fd5b61089d84848484036000610baf565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109165760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161090d91906119ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109885760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161097f91906119ea565b60405180910390fd5b610993838383610d86565b505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15610a41577f00000000000000000000000000000000000000000000000000000000000000009050610a4c565b610a49610fab565b90505b90565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060610ace60057f000000000000000000000000000000000000000000000000000000000000000061104190919063ffffffff16565b905090565b6060610b0960067f000000000000000000000000000000000000000000000000000000000000000061104190919063ffffffff16565b905090565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050559050919050565b6000610b78610b72610998565b836110f1565b9050919050565b600080600080610b9188888888611132565b925092509250610ba18282611226565b829350505050949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610c215760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610c1891906119ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c935760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610c8a91906119ea565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610d80578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610d77919061161e565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dd8578060026000828254610dcc9190611b84565b92505081905550610eab565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e64578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610e5b93929190611b1e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ef45780600260008282540392505081905550610f41565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f9e919061161e565b60405180910390a3505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004630604051602001611026959493929190611bb8565b60405160208183030381529060405280519060200120905090565b606060ff60001b831461105e576110578361138a565b90506110eb565b81805461106a90611a34565b80601f016020809104026020016040519081016040528092919081815260200182805461109690611a34565b80156110e35780601f106110b8576101008083540402835291602001916110e3565b820191906000526020600020905b8154815290600101906020018083116110c657829003601f168201915b505050505090505b92915050565b60006040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b60008060007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08460001c111561117257600060038592509250925061121c565b6000600188888888604051600081526020016040526040516111979493929190611c0b565b6020604051602081039080840390855afa1580156111b9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361120d57600060016000801b9350935093505061121c565b8060008060001b935093509350505b9450945094915050565b6000600381111561123a57611239611c50565b5b82600381111561124d5761124c611c50565b5b0315611386576001600381111561126757611266611c50565b5b82600381111561127a57611279611c50565b5b036112b1576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260038111156112c5576112c4611c50565b5b8260038111156112d8576112d7611c50565b5b0361131d578060001c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401611314919061161e565b60405180910390fd5b6003808111156113305761132f611c50565b5b82600381111561134357611342611c50565b5b0361138557806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161137c91906117d6565b60405180910390fd5b5b5050565b60606000611397836113fe565b90506000602067ffffffffffffffff8111156113b6576113b5611a65565b5b6040519080825280601f01601f1916602001820160405280156113e85781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b60008060ff8360001c169050601f811115611445576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561148857808201518184015260208101905061146d565b60008484015250505050565b6000601f19601f8301169050919050565b60006114b08261144e565b6114ba8185611459565b93506114ca81856020860161146a565b6114d381611494565b840191505092915050565b600060208201905081810360008301526114f881846114a5565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061153082611505565b9050919050565b61154081611525565b811461154b57600080fd5b50565b60008135905061155d81611537565b92915050565b6000819050919050565b61157681611563565b811461158157600080fd5b50565b6000813590506115938161156d565b92915050565b600080604083850312156115b0576115af611500565b5b60006115be8582860161154e565b92505060206115cf85828601611584565b9150509250929050565b60008115159050919050565b6115ee816115d9565b82525050565b600060208201905061160960008301846115e5565b92915050565b61161881611563565b82525050565b6000602082019050611633600083018461160f565b92915050565b600060ff82169050919050565b61164f81611639565b811461165a57600080fd5b50565b60008135905061166c81611646565b92915050565b6000819050919050565b61168581611672565b811461169057600080fd5b50565b6000813590506116a28161167c565b92915050565b600080600080600080600060e0888a0312156116c7576116c6611500565b5b60006116d58a828b0161154e565b97505060206116e68a828b0161154e565b96505060406116f78a828b01611584565b95505060606117088a828b01611584565b94505060806117198a828b0161165d565b93505060a061172a8a828b01611693565b92505060c061173b8a828b01611693565b91505092959891949750929550565b60008060006060848603121561176357611762611500565b5b60006117718682870161154e565b93505060206117828682870161154e565b925050604061179386828701611584565b9150509250925092565b6117a681611639565b82525050565b60006020820190506117c1600083018461179d565b92915050565b6117d081611672565b82525050565b60006020820190506117eb60008301846117c7565b92915050565b60006020828403121561180757611806611500565b5b60006118158482850161154e565b91505092915050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6118538161181e565b82525050565b61186281611525565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61189d81611563565b82525050565b60006118af8383611894565b60208301905092915050565b6000602082019050919050565b60006118d382611868565b6118dd8185611873565b93506118e883611884565b8060005b8381101561191957815161190088826118a3565b975061190b836118bb565b9250506001810190506118ec565b5085935050505092915050565b600060e08201905061193b600083018a61184a565b818103602083015261194d81896114a5565b9050818103604083015261196181886114a5565b9050611970606083018761160f565b61197d6080830186611859565b61198a60a08301856117c7565b81810360c083015261199c81846118c8565b905098975050505050505050565b600080604083850312156119c1576119c0611500565b5b60006119cf8582860161154e565b92505060206119e08582860161154e565b9150509250929050565b60006020820190506119ff6000830184611859565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a4c57607f821691505b602082108103611a5f57611a5e611a05565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060c082019050611aa960008301896117c7565b611ab66020830188611859565b611ac36040830187611859565b611ad0606083018661160f565b611add608083018561160f565b611aea60a083018461160f565b979650505050505050565b6000604082019050611b0a6000830185611859565b611b176020830184611859565b9392505050565b6000606082019050611b336000830186611859565b611b40602083018561160f565b611b4d604083018461160f565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b8f82611563565b9150611b9a83611563565b9250828201905080821115611bb257611bb1611b55565b5b92915050565b600060a082019050611bcd60008301886117c7565b611bda60208301876117c7565b611be760408301866117c7565b611bf4606083018561160f565b611c016080830184611859565b9695505050505050565b6000608082019050611c2060008301876117c7565b611c2d602083018661179d565b611c3a60408301856117c7565b611c4760608301846117c7565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea2646970667358221220445097e9d6858bc8c054cae02e77c0ed696fedbd2ed262480f9bde1ec24e39c764736f6c6343000818003300000000000000000000000000000000000000000000152d02c7e14af680000000000000000000000000000015398a65cf69c1cdb08d0b4b9994fb8cc77f6f55